/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.svh.Entidad;

import com.svh.Utils.Exporter;
import java.io.Serializable;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Transient;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;

/**
 *
 * @author Luis Alonso Ballena Garcia
 */
@Entity
@Table(name = "cliente")
public class Cliente implements Serializable, Exporter {

    @Id
    @GeneratedValue
    @Column(name = "idCliente", unique = true, nullable = false)
    Integer id;

    @Column(name = "telefono")
    String telefono;

    @Column(name = "celular")
    String celular;

    @Column(name = "direccion")
    String direccion;

    @Column(name = "credito")
    boolean credito;

    @OneToOne(fetch = FetchType.LAZY, mappedBy = "padre", cascade = CascadeType.ALL)
    @Fetch(FetchMode.JOIN)
    Cliente_Natural natural;

    @OneToOne(fetch = FetchType.LAZY, mappedBy = "padre", cascade = CascadeType.ALL)
    @Fetch(FetchMode.JOIN)
    Cliente_Juridico juridico;

    @Transient
    String clienteComun;

    @Transient
    String tipo;

    public Cliente() {

    }

    /**
     * GETTERS AND SETTERS *
     */
    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getTelefono() {
        return telefono;
    }

    public void setTelefono(String telefono) {
        this.telefono = telefono;
    }

    public String getCelular() {
        return celular;
    }

    public void setCelular(String celular) {
        this.celular = celular;
    }

    public String getDireccion() {
        return direccion;
    }

    public void setDireccion(String direccion) {
        this.direccion = direccion;
    }

    public boolean isCredito() {
        return credito;
    }

    public void setCredito(boolean credito) {
        this.credito = credito;
    }

    public Cliente_Natural getNatural() {
        return natural;
    }

    public void setNatural(Cliente_Natural natural) {
        this.natural = natural;
    }

    public Cliente_Juridico getJuridico() {
        return juridico;
    }

    public void setJuridico(Cliente_Juridico juridico) {
        this.juridico = juridico;
    }

    public String getClienteComun() {
        if (natural == null && juridico == null) {
            clienteComun = "";
        } else if (natural == null) {
            clienteComun = juridico.getRazonSocial();
        } else if (juridico == null) {
            clienteComun = natural.getNombre() + " " + natural.getApellidoPaterno() + " " + natural.getApellidoMaterno();
        }
        return clienteComun;
    }

    public void setClienteComun(String clienteComun) {
        this.clienteComun = clienteComun;
    }

    public String getTipo() {
        if (natural == null && juridico == null) {
            tipo = "--";
        } else if (natural == null) {
            tipo = "Jurídico";
        } else if (juridico == null) {
            tipo = "Natural";
        }
        return tipo;
    }

    public void setTipo(String tipo) {
        this.tipo = tipo;
    }

    @Override
    public String[] getDatos() {
        String[] datos = new String[11];
        datos[0] = "" + this.id;
        datos[1] = "" + this.getTipo();
        datos[2] = "" + this.getClienteComun();
        datos[3] = "" + this.telefono;
        datos[4] = "" + this.celular;
        return datos;
    }

    @Override
    public String[] getTitulos() {
        return new String[]{"id", "Tipo Empleado", "Nombre", "Telefono", "Celular"};
    }

}
